using System;
using System.Collections.Generic;
using SanFS.DiscLibrary;

namespace SanFS.MediaChangerLibrary
{
	public interface IDataStore
	{
#if false
		// XXX: Matt - Please prepare to impliment these:
		void					AddStorageElement(IStorageElement Element);
		void					UpdateStorageElement(IStorageElement Element);
		void					DeleteStorageElement(int Slot);
		IStorageElement			GetStorageElement(int Slot);
		void					AddDisc(IDisc Disc);
		void					UpdateDisc(IDisc Disc);
		void					DeleteDisc(Guid Uuid);
		IStorageElement			GetDisc(Guid Uuid);
#endif
		
		/*
		 * Connect
		 */
		void					Connect();
		
		/*
		 * Disconnect from a connected store
		 */
		void					Disconnect();
		
		/*
		 * Completely erase and re-initialize the datastore
		 */
		void					Initialize();
		
		/*
		 * Get a list of storage elements from the datastore
		 */
		List<IStorageElement>	GetStorageElementList();
		
		/*
		 * Save a list of storage elements to the datastore
		 */
		void					SaveStorageElementList(List<IStorageElement> StorageElements);
		
		/*
		 * Get a list of discs from the datastore
		 */
		List<IDisc>				GetDiscList();
		
		/*
		 * Save a list of discs to the datastore
		 */
		void					SaveDiscList(List<IDisc> Discs);
		
		/*
		 * Return the unique key for this datastore
		 */
		string					Key {get; }
		
		/*
		 * Return the URI which this datastore object is bound.
		 */
		string					Uri {get; }
		
		/*
		 * Create and return a new instance of this object
		 */
		IDataStore				CreateInstance(string Uri);
	}  // END INTERFACE
}  // END NAMESPACE
